package com.woniu.project.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.woniu.project.core.domain.Management;
import com.woniu.project.dto.ManagementDto;
import com.woniu.project.dto.ManagementRoleDto;
import com.woniu.project.dto.PermissionTypeAndPermissionDto;
import com.woniu.project.dto.RoleDto;
import com.woniu.project.params.*;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author Klaus
 * @since 2020-10-13
 */
public interface ManagementService extends IService<Management> {

    /**
     * 发送短信的服务
     * @param ManagementPhone 手机号码
     */
    void sendMsg(String ManagementPhone);

    /**
     * 管理员登录 判断账号密码是否正确 短信验证码是否正确
     * @return
     */
    String login(ManagementParams managementParams);

    /**
     * 新增管理员
     *
     * @param managementParams managementParams必须传入三个参数
     *                         managementName 用户名
     *                         managementPassword 密码
     *                         managementPhone 手机号
     * @return
     */
    void addManagement(ManagementParams managementParams);

    /**
     * 分页查询所有的管理员
     * @param selectParam
     * @return
     */
    IPage<ManagementDto> selectAllManagement(SelectParam selectParam);

    /**
     * 修改管理员状态
     * @param managementParams
     *managementId 管理员ID
     *managementStatus 修改后的管理员的状态
     * @return
     */
    void changeManagementStatus(ManagementParams managementParams);

    /**
     * 修改管理员的密码
     * @param managementParams
     * managementId 管理员ID
     * managementOldPassworld  管理员旧密码
     * managementNewPassworld  管理员新密码
     * @return
     */
    void changeManagementPassword(ManagementChangePasswordParams managementParams);

    /**
     * 新增管理员的角色
     * @param roleParams
     * roleName 角色名
     * roleDescription 角色描述
     * @return
     */
    void addRole(RoleParams roleParams);

    /**
     * 给管理员分配角色
     * @return roleManagementParams
     * managementId 管理员ID
     * roleIdList 角色ID的集合
     */
    void allocationRole(RoleManagementParams roleManagementParams);

    /**
     * 查询所有管理员所有角色
     * @return
     */
    List<ManagementRoleDto> selectAllManagementRole();

    /**
     * 查询指定管理员所有角色
     * @param managementId
     * @return
     */
    List<RoleDto> selectOneManagementRole(String managementId);

    /**
     * 查询权限列表
     * @return
     */
    List<PermissionTypeAndPermissionDto> selectAllPermission();

    /**
     * 根据角色ID修改角色的权限
     * @param rolePermissionParams
     * @return
     */
    void changeRolePermission(RolePermissionParams rolePermissionParams);
}
